import axios from 'axios'
import store from '../store'
// import router from '@/router/router.js'
import {Toast} from "vant";

const http = axios.create({
    baseURL: `${store.state.baseUrlSecond}`,
    timeout: 1000 * 30,
    withCredentials: true,
    headers: {
        'Content-Type': 'application/json; charset=utf-8'
    }
})

/**
 * 请求拦截
 */
http.interceptors.request.use(config => {
    console.log(sessionStorage.getItem('accessToken'))
    let accessToken = sessionStorage.getItem("accessToken");
    if (accessToken) {
        config.headers.accessToken = encodeURIComponent(accessToken);
    }
    return config
}, error => {
    console.log('请求拦截', error)
    return Promise.reject(error)
})

/**
 * 响应拦截
 */
http.interceptors.response.use(async response => {
    if (response.data.code == 200 || response.data.code == 0) {
        return response.data.data;
    } else if (response.data.code == 400) {
        // router.replace("/login");
        console.log('接口返回400，跳转到登录页面')
    } else if (response.data.code == 401) {
        console.log("token失效，尝试重新获取")
        let refreshToken = sessionStorage.getItem("refreshToken");
        if (!refreshToken) {
            // router.replace("/login");
            console.log('若重新获取token失效的话，重新登录页面')
        }
        // 发送请求, 进行刷新token操作, 获取新的token
        const data = await http({
            method: 'put',
            url: '/refreshToken',
            headers: {
                refreshToken: refreshToken
            }
        })
        // 保存token
        sessionStorage.setItem("accessToken", data.accessToken);
        sessionStorage.setItem("refreshToken", data.refreshToken);
        // 这里需要把headers清掉，否则请求时会报错，原因暂不详...
        response.config.headers = undefined;
        // 重新发送刚才的请求
        return http(response.config)
    } else {
        // Message({
        //     message: response.data.message,
        //     type: 'error',
        //     duration: 1500,
        //     customClass: 'element-error-message-zindex'
        // })
        Toast(response.data.message)
        return Promise.reject(response.data)
    }
}, error => {
    let resultError = {response: error};
    if (error.message == 'Network Error') {
        resultError.message = '网络错误';
        // this.$toast.fail('请检查网络是否链接');
        // Message({
        //     message: '请检查网络 稍后再试',
        //     type: 'error',
        //     duration: 1500,
        //     customClass: 'element-error-message-zindex'
        // })
        Toast.fail('请检查网络 稍后再试')
    }
    if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        // 请求超时错误
        console.log('请求超时');
        // this.$toast.fail('请检查网络 稍后再试 ')
        // Message({
        //     message: '请检查网络 稍后再试',
        //     type: 'error',
        //     duration: 1500,
        //     customClass: 'element-error-message-zindex'
        // })
        Toast.fail('请检查网络，稍后再试')
        // 在这里可以添加超时提醒的逻辑，例如使用Toast组件提示用户请求超时
    }

    switch (error.response.status) {
        case 400:
            // Message({
            //     message: error.response.data,
            //     type: 'error',
            //     duration: 1500,
            //     customClass: 'element-error-message-zindex'
            // })
            Toast(error.response.data)
            break
        case 401:
            // router.replace("/login");
            break
        case 405:
            // Message({
            //     message: 'http请求方式有误',
            //     type: 'error',
            //     duration: 1500,
            //     customClass: 'element-error-message-zindex'
            // })
            Toast('http请求方式有误')
            break
        case 404:
        case 500:
            // Message({
            //     message: '服务器出了点小差，请稍后再试',
            //     type: 'error',
            //     duration: 1500,
            //     customClass: 'element-error-message-zindex'
            // })
            Toast('服务器出了点小差，请稍后再试')
            break
        case 501:
            // Message({
            //     message: '服务器不支持当前请求所需要的某个功能',
            //     type: 'error',
            //     duration: 1500,
            //     customClass: 'element-error-message-zindex'
            // })
            Toast('服务器不支持当前请求所需要的某个功能')
            break
    }

    return Promise.reject(error)
})


export default http
